package com.lyq;
/*
 * 接口需要参数：
 * 1、生成correct参数的名称
 * 2、查找文件的名称
 * */

import com.hgq.JsonMd5;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;

/**
 * 接口返回参数
  * 1、生成成功：
  *    返回correct文件绝对路径
  * 2、生成失败：
  *    返回NULL
 */
public class correctGenerate {
    String fileName,urls;
    public correctGenerate(String fileName,String urls){
        this.fileName=fileName;
        this.urls=urls;
    }
    public String correctFile(){
        String url="";
        File file;
        JSONArray mainArray=new JSONArray();//正确文件
        try{ File tempFiles=new File(urls);
            url=tempFiles.getCanonicalPath();//获取当前相对地址+urls的地址
            System.out.println("文件地址获取成功!\n"+url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        file=new File(url);
        if(!file.exists()){
            System.out.println(file.getPath()+"不存在");//判断文件夹内存不存在文件夹！
            return null;
        }
        File[] tempFile=file.listFiles();//存在文件夹就创建一个文件夹下的文件夹列表数组
        System.out.println("文件目录正常");
        for(int i=0;i<tempFile.length;i++){//当前在urls文件夹里面循环全部的文件夹
            if(!tempFile[i].isFile()) {//只要文件夹
//                System.out.println(tempFile[i].getPath());//开始进入到urls文件夹里的文件夹获取数据
                String fileAdreesName=tempFile[i].getPath();//url的获取
                correctPutList(mainArray,fileAdreesName);
            }
        }
        System.out.println("开始写入数据");
        jsonFileWrite Write=new jsonFileWrite(mainArray,fileName);
        return Write.FileWrite();
    }
    private void correctPutList(JSONArray mainArray,String url){
        int flag;//检查两对数据是否已加入
        HashMap<String,String> jsonHashMap=new HashMap<>();
        HashMap<String,String> jarHashMap=new HashMap<>();
        JSONObject mainObject;
        HashSet<String> hashSet=new HashSet<String>();
        File file=new File(url);
        File[]fileList=file.listFiles();

        if(!file.exists()){
            System.out.println(file.getPath()+"文件夹不存在");
            return ;
        }else {//判断这个文件夹是否为空
            //获得文件的名字；
            for(File fileNameget:fileList){
                if(fileNameget.isFile()){//是文件
                    String name=fileNameget.getName();
                    int lastIndexName=name.lastIndexOf(".");
//                    System.out.println(lastIndexName);
                    if(!(lastIndexName==-1)){//是.xxx文件继续运行
                        String lastName = name.substring(name.lastIndexOf(".") + 1);//获取文件的最后的标识
                        String headName = name.substring(0, name.lastIndexOf("."));
                        if(lastName.equalsIgnoreCase("json") || lastName.equalsIgnoreCase("jar")) {//只找正确的名字后缀
                            if (!hashSet.contains(headName)) {
                                hashSet.add(headName);
                            } else {//有相同的就删去
                                    hashSet.remove(headName);//当重复了就删去重复的键值
                            }
                        }
                    }
                }
            }//-------------------------------------------判断没有重复值的数据--=------------------------------------
//            for(String h:hashSet){
//                System.out.println("重复文件："+h);
//            }
            //--------------------------------------------判断文件是否重复后分配数据------------------------------------------------
            flag=2;
            for(File fileListName:fileList) {
                if (fileListName.isFile()) {//==========================只检查文件======================
                    String name = fileListName.getName();
                    int lastIndexName = name.lastIndexOf(".");
                    if (!(lastIndexName == -1)) {//=====================只查询有后缀的文件===========
                        String lastName = name.substring(lastIndexName + 1);//获取文件的后缀
                        String headName = name.substring(0, lastIndexName);//获取文件名
                        String path = fileListName.getPath();

                        if (!hashSet.contains(headName)) {//=========存在这个数说明是重复的就是correct========
                            if (lastName.equalsIgnoreCase("json") || lastName.equalsIgnoreCase("jar")) {//是json和jar格式的文件
                                if (lastName.equalsIgnoreCase("json")) {//只获取json结尾的文件！
//                        System.out.println(fileListName.getName() + "\n" + fileListName.getPath());
                                    jsonHashMap.put("serviceJsonRoot", path);
                                    jsonHashMap.put("serviceJson", name);
//                                System.out.println("加入的数据json:" + name);
                                    flag += 1;
//                        这里可以插入文件内的数据有需要在说
                                } else if (lastName.equalsIgnoreCase("jar")) {
                                    jarHashMap.put("serviceJarRoot", path);
                                    jarHashMap.put("serviceJar", name);
//                                System.out.println("加入的数据jar:" + name);
                                    flag += 1;
                                }
//                            System.out.println("flag的值： " + flag + "\n除余" + flag % 2);
                                if (flag % 2 == 0) {
//                                System.out.println("\n找到匹配的一对数据\n");
                                    String serviceJarRoot=jarHashMap.get("serviceJarRoot");
                                    String serviceJsonRoot=jsonHashMap.get("serviceJsonRoot");
                                    String previous = url;//文件夹名字
                                    mainObject = new JSONObject();//=================新建内存单元==============
                                    mainObject.put("serviceJsonRoot",serviceJsonRoot );
                                    mainObject.put("serviceJson", jsonHashMap.get("serviceJson"));
                                    mainObject.put("serviceJarRoot",serviceJarRoot );
                                    mainObject.put("serviceJar", jarHashMap.get("serviceJar"));
                                    mainObject.put("serviceURL", previous);
                                    mainObject.put("serviceJarMD5", JsonMd5.getJsonMD5(serviceJarRoot));
                                    mainObject.put("serviceJsonMD5",JsonMd5.getJsonMD5(serviceJsonRoot));
                                    mainArray.put(mainObject);
//                                    JSONObject md5Object=JsonMd5.getMD5NewJSONObject(mainObject);
//                                    mainArray.put(md5Object);
//                                System.out.println("文件夹： " + previous + name + " 内的文件名读取成功");
                                }
                            }
                        }
                    }
                }
            }
//            System.out.println("数据写入完成");//-----------------------------------------------for结束-----------------------------------------
        }
    }
}
